package main

import (
	"io/fs"
	"os"
	"path/filepath"
)

// Root 结构体，代表文件系统根
type Root struct {
	root string
}

// rootFS 类型，实现 fs.FS 及相关接口
type rootFS Root

// 返回抽象文件系统
func (r *Root) FS() fs.FS {
	return (*rootFS)(r)
}

// 实现 fs.FS 接口
func (r *rootFS) Open(name string) (fs.File, error) {
	absPath := filepath.Join(r.root, filepath.Clean(name))
	return os.Open(absPath)
}

// 实现 fs.ReadDirFS 接口
func (r *rootFS) ReadDir(name string) ([]fs.DirEntry, error) {
	absPath := filepath.Join(r.root, filepath.Clean(name))
	return os.ReadDir(absPath)
}

// 实现 fs.StatFS 接口
func (r *rootFS) Stat(name string) (fs.FileInfo, error) {
	absPath := filepath.Join(r.root, filepath.Clean(name))
	return os.Stat(absPath)
}

// 实现 fs.ReadFileFS 接口
func (r *rootFS) ReadFile(name string) ([]byte, error) {
	absPath := filepath.Join(r.root, filepath.Clean(name))
	return os.ReadFile(absPath)
}

// 实现 fs.ReadLinkFS 接口（如有需要）
func (r *rootFS) Readlink(name string) (string, error) {
	absPath := filepath.Join(r.root, filepath.Clean(name))
	return os.Readlink(absPath)
}
